/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package domain.controllers;

import domain.Entity.EntityTarea;
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
import managers.TareaManager;
import domain.Entity.EntityProyecto;
import domain.Entity.EntityUsuario;
import domain.commands.TareaComando;
import java.sql.Time;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.StringTokenizer;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.SimpleFormController;
import org.springframework.web.servlet.view.RedirectView;

/**
 *
 * @author jorge
 */
public class tareaController extends SimpleFormController{
    TareaManager tm= TareaManager.getInstance();
    
    public tareaController() {
        setCommandClass(TareaComando.class);
  }
  
    @Override
    protected ModelAndView onSubmit(HttpServletRequest request, HttpServletResponse response, Object command, org.springframework.validation.BindException errors) throws Exception {
 
        ModelAndView mav = new ModelAndView();
        HttpSession session = request.getSession();
        EntityUsuario eu = (EntityUsuario) session.getAttribute("usuario");
        if(eu == null){
            mav.setView(new RedirectView("login.htm"));
            return mav;
        }else{
        TareaComando tc = (TareaComando) command;
        EntityProyecto proyecto = (EntityProyecto) session.getAttribute("proyecto"); 
        
        String etiqueta = "";
        List l = new ArrayList();
        StringTokenizer st = new StringTokenizer(tc.getEtiqueta());
        while(st.hasMoreTokens()){
            l.add(st.nextToken());
        }
        Collections.sort(l);
        Iterator it = l.iterator();
        while(it.hasNext()){
            etiqueta = etiqueta.concat((String) it.next()+" ");
        }

        
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
        boolean principio = false;
        boolean fin = false;
        Date fecIni = null;
        Date fecFin = null;
        
        
        if(!tc.getFechaIni().equals("")){
            fecIni = sdf.parse(tc.getFechaIni());
            if(fecIni.compareTo(proyecto.getFecha_ini()) < 0){
                    principio = true;
            }
        }
        if(!tc.getFechaFin().equals("")){
             fecFin = sdf.parse(tc.getFechaFin());
             if(fecFin.compareTo(proyecto.getFecha_fin()) > 0){
                    fin = true;                    
            }
        }
	
        if(estaTarea(tc.getNombreTarea(),proyecto.getIdProyecto()) || principio || fin){
            
            mav.setView(new RedirectView("errorTarea.htm"));
        
        }else{
            
            EntityTarea et = new EntityTarea();
            
            et.setNombreTarea(tc.getNombreTarea());
            et.setFecha_ini(fecIni);
            et.setFecha_fin(fecFin);
            et.setCompletado(false);
            Time t = new Time(0,0,0);
            et.setEpy(proyecto);
            et.setEtiquetas(etiqueta);
    
            tm.addTarea(tc.getNombreTarea(),fecIni,fecFin,proyecto,etiqueta);
            mav.setView(new RedirectView("mostrarProyectos.htm"));
            
        }
        return mav;
        }
    }
    
    private boolean estaTarea(String nombre,long idProyecto){
        
         EntityTarea et = tm.get(nombre,idProyecto);
         
         return (et.getNombreTarea() != null) ;
        
    }
        
}